package com.cheney.redisson.annotation;


import com.cheney.redisson.enums.LockModel;

import java.lang.annotation.*;

/**
 * 分布式锁注解
 * @author si.chen
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Lock {

    /**
     * 锁的模式:如果不设置,自动模式,当参数只有一个.使用 REENTRANT 参数多个 MULTIPLE
     */
    LockModel lockModel() default LockModel.AUTO;

    /**
     * 如果keys有多个,如果不设置,则使用 联锁
     */
    String[] keys() default {};

    /**
     * key的静态常量:当key的spel的值是LIST,数组时使用+号连接将会被spel认为这个变量是个字符串,只能产生一把锁,达不到我们的目的,<br />
     * 而我们如果又需要一个常量的话.这个参数将会在拼接在每个元素的后面
     */
    String keyConstant() default "";

    /**
     * 锁超时时间lockWatchdogTimeout，超过这个时间锁自动释放，各线程重新争取锁
     */
    long lockWatchdogTimeout() default 30000;

    /**
     * 第一次获取锁发现线程已被占用，排队attemptTimeout再获取锁，超过这个时间不等待直接抛获取锁异常
     */
    long attemptTimeout() default 3000;


}
